home *** CD-ROM | disk | FTP | other *** search
/ Developer Helper 1: Phil & Dave's Excellent CD / XLNT.CD ProDOS.raw / UTILITIES:SCSI.UTILITIES / STARTUP.bas < prev   
BASIC Source File  |  2022-08-05  |  12KB  |  300 lines

  1. 10  REM   ***********************************************************
  2. 20  REM   *               Hard Disk - SCSI Tester                   *
  3. 30  REM   *                                                         *
  4. 40  REM   ***********************************************************
  5. 50  REM   *
  6. 60  REM   * By Karl B. Young
  7. 70  REM   *
  8. 71  REM   *   VERSION DATE      Author  Comment
  9. 72  REM   *   1.0A1   30-Jun-86 KBY     Alpha release
  10. 73  REM   *   1.0A2   01-Jul-86 KBY     beep at end of test,
  11. 74  REM   *                             fix bug in .ASM
  12. 75  REM   *   1.0B1   30-Jul-86 KBY     Beta Release, no changes
  13. 76  REM   *   1.0B2   04-Aug-86 KBY     Upgrade page titles, test 1
  14. 77  REM   *   1.0     05-Aug-86 KBY     Finalize test 2 reallocation
  15. 78  REM   *   1.1     08-Feb-88 BPA     Quit using "BYE"
  16. 99  REM   *
  17. 100  REM  ***********************************************************
  18. 110  REM  *                 Variable Declarations                   *
  19. 120  REM  *                                                         *
  20. 130  REM  ***********************************************************
  21. 800 LM =  PEEK(106) *256 + PEEK(105)
  22. 810  IF LM <12288  THEN 850
  23. 820  PRINT "OUT OF MEMORY"
  24. 830  END 
  25. 850  LOMEM: 16384
  26. 900  DIM MI$(6),MC(6): REM    Machine ID names, caps
  27. 910  DIM DS(15),DD(15): REM   Disk slot/drive combinations 
  28. 920  DIM DZ(15),DN$(15): REM   Disk size, Disk name (if available)
  29. 930  DIM START$(3): REM   parts of pinwheel
  30. 1000  GOSUB 2000: REM  initialize
  31. 1010  GOSUB 3000: REM  find disks
  32. 1020  GOSUB 4000: REM  display screen
  33. 1030  GOSUB 5000: REM  get user's choice
  34. 1040  IF QUIT  THEN 1100: REM  user chose to stop
  35. 1050  GOSUB 6000: REM  perform test and display result 
  36. 1060  GOTO 1030
  37. 1100  HOME : PRINT  CHR$(4);"BYE"
  38. 1110  END 
  39. 2000  REM  ************************************************************
  40. 2010  REM  *                   Initialization                         *
  41. 2020  REM  *                                                          *
  42. 2030  REM  ************************************************************
  43. 2100  REM 
  44. 2110  REM  ---- find the machine ID for this machine
  45. 2120  REM  ----    only ][+,//e can run this program
  46. 2130  REM  ----    (][ is too old, //c has no slots)
  47. 2132  REM  ---- Machine ID's:
  48. 2133  REM  ---- 0-Unkown Apple // (clone?), 1-Apple ][, 2-Apple ][+
  49. 2134  REM  ---- 3-Apple //e, 4-Apple //e+, 5-Apple //c, 6-Apple //c+
  50. 2140  REM  ----
  51. 2142  FOR I = 0 TO 6: REM  Read machine names
  52. 2144  READ MI$(I),MC(I)
  53. 2146  NEXT I
  54. 2150 M1 =  PEEK( -1101):M2 =  PEEK( -1088):M3 =  PEEK( -1089)
  55. 2155  IF M1 = 56  AND M2 = 96  AND M3 = 47  THEN MACHINE = 1
  56. 2156  IF M1 = 234  AND M2 = 234  AND M3 = 234  THEN MACHINE = 2
  57. 2157  IF M1 = 6  AND M2 = 234  AND M3 = 193  THEN MACHINE = 3
  58. 2158  IF M1 = 6  AND M2 = 224  AND M3 = 0  THEN MACHINE = 4
  59. 2159  IF M1 = 6  AND M2 = 0  AND M3 = 255  THEN MACHINE = 5
  60. 2160  IF M1 = 6  AND M2 = 0  AND M3 = 0  THEN MACHINE = 6
  61. 2170 M$ = MI$(MACHINE):CAP = MC(MACHINE)
  62. 2175 A$ = M$: GOSUB 8100:M$ = A$
  63. 2180  IF MACHINE <2  OR MACHINE >4  THEN 9100
  64. 2200  REM  ----
  65. 2210  REM  ---- turn off 80-column card, display splash screen
  66. 2220  REM  ----
  67. 2230  PRINT  CHR$(12); CHR$(21): REM  according to 80-column manual
  68. 2240 COL = 40
  69. 2300  HOME : REM  clear screen
  70. 2310  READ A$:V = 5: GOSUB 8200:V = 20: GOSUB 8200: REM  border lines
  71. 2315 LINE$ = A$
  72. 2320  READ A$: GOSUB 8100:V = 10: GOSUB 8200: REM  "Apple //"
  73. 2325 L0$ = A$
  74. 2330  READ A$: GOSUB 8100:V = 12: GOSUB 8200: REM  "SCSI TESTER"
  75. 2335 L1$ = A$
  76. 2340  READ A$: GOSUB 8100:V = 14: GOSUB 8200: REM  "copyright"
  77. 2345 L2$ = A$
  78. 2350  READ A$: GOSUB 8100:V = 16: GOSUB 8200: REM  "all rights"
  79. 2360  FOR I = 0 TO 3: READ STAR$(I): NEXT I
  80. 2370  READ PASS$,FAIL$,ABRT$
  81. 2380  READ A$: GOSUB 8100:NNAME$ = A$: REM  "No Name Found"
  82. 2400 ASM = 12288
  83. 2410  PRINT  CHR$(4);"BLOAD HD.SCSI.ASM.0"
  84. 2999  RETURN 
  85. 3000  REM  ************************************************************
  86. 3010  REM  *                   Find SCSI Disks                        *
  87. 3020  REM  *                                                          *
  88. 3030  REM  ************************************************************
  89. 3100  REM  ----
  90. 3110  REM  ---- call Smartport status 0 to get # of disks
  91. 3120  REM  ----
  92. 3122  POKE ASM +3,1
  93. 3125  CALL ASM
  94. 3130 NDISKS =  PEEK(ASM +5)
  95. 3135  IF NDISKS <1  THEN NDISKS = 0: GOTO 3999
  96. 3140 I1 = 0
  97. 3150  POKE ASM +3,2
  98. 3160  FOR I = 1 TO NDISKS
  99. 3170  POKE ASM +5,I
  100. 3180  CALL ASM
  101. 3190  IF  PEEK(ASM +4) >0  THEN 3300
  102. 3200 I1 = I1 +1
  103. 3210 DS(I1) =  PEEK(ASM +6):DD(I1) =  PEEK(ASM +7)
  104. 3220 SIZE =  PEEK(ASM +11)
  105. 3222 SIZE = SIZE *256 + PEEK(ASM +10)
  106. 3224 SIZE = SIZE *256 + PEEK(ASM +9)
  107. 3226 SIZE = SIZE *256 + PEEK(ASM +8)
  108. 3228 DZ(I1) = SIZE
  109. 3230 NL =  PEEK(ASM +12)
  110. 3240  IF NL = 0  THEN DN$(I1) = NNAME$: GOTO 3300
  111. 3245 A$ = ""
  112. 3250  FOR I2 = 1 TO NL
  113. 3260 A$ = A$ + CHR$( PEEK(ASM +12 +I2))
  114. 3270  NEXT I2
  115. 3280 DN$(I1) = A$
  116. 3300  NEXT I
  117. 3310 NDISKS = I1
  118. 3999  RETURN 
  119. 4000  REM  ************************************************************
  120. 4010  REM  *                Display the full screen                   *
  121. 4020  REM  *                                                          *
  122. 4030  REM  ************************************************************
  123. 4100  FOR I = 1 TO 500: NEXT I
  124. 4110  HOME 
  125. 4200 A$ = LINE$:V = 3: GOSUB 8200:V = 20: GOSUB 8200: REM  border lines
  126. 4210  VTAB 1: HTAB 2: PRINT L1$: REM  "SCSI Hard Disk Tester"
  127. 4230 A$ = L0$:V = 1: GOSUB 8300: REM  "Apple //"
  128. 4240  READ A$: VTAB 2: HTAB 2: GOSUB 8100: PRINT A$: REM  version #
  129. 4242  READ A$:V = 2: GOSUB 8100: GOSUB 8300: REM  copyright
  130. 4245  VTAB 5
  131. 4250  READ A$: GOSUB 8100: HTAB 3: PRINT A$;: REM  "Slot"
  132. 4260  READ A$: GOSUB 8100: HTAB 7: PRINT A$;: REM  "Drive"
  133. 4270  READ A$: GOSUB 8100: HTAB 11: PRINT A$;: REM  "Name"
  134. 4280  READ A$: GOSUB 8100: HTAB 27: PRINT A$: REM   "Size"
  135. 4282  READ A$: HTAB 3: PRINT A$;
  136. 4284  READ A$: HTAB 7: PRINT A$;
  137. 4286  READ A$: HTAB 11: PRINT A$;
  138. 4288  READ A$: HTAB 27: PRINT A$
  139. 4290  READ A$: GOSUB 8100:ZIP$ = A$
  140. 4300  VTAB 7
  141. 4305  IF NDISKS <1  THEN  HTAB 5: PRINT ZIP$;: GOTO 4400
  142. 4310  FOR I = 1 TO NDISKS
  143. 4320  PRINT  TAB( 4);DS(I); TAB( 8);DD(I); TAB( 11);DN$(I); TAB( 27);DZ(I)/2;"K"
  144. 4330  NEXT I
  145. 4400 CUR = 1
  146. 4410  READ A$: GOSUB 8100:USE$ = A$
  147. 4412  READ A$: GOSUB 8100:IM$ = A$
  148. 4414  READ A$: GOSUB 8100:ARROW$ = A$
  149. 4416  READ A$: GOSUB 8100:SELECT$ = A$
  150. 4420  READ A$: GOSUB 8100:CR$ = A$
  151. 4430  READ A$: GOSUB 8100:ESC$ = A$
  152. 4440  READ A$: GOSUB 8100:QUIT$ = A$
  153. 4999  RETURN 
  154. 5000  REM  ************************************************************
  155. 5010  REM  *                Get the user's choice                     *
  156. 5020  REM  *                                                          *
  157. 5030  REM  ************************************************************
  158. 5100  IF NDISKS <2  THEN 5150
  159. 5110  VTAB 22: HTAB 2: PRINT USE$;
  160. 5120  IF MACHINE >2  THEN  PRINT ARROW$;
  161. 5130  IF MACHINE <3  THEN  PRINT IM$;
  162. 5140  PRINT SELECT$
  163. 5150  IF NDISKS >0  THEN  VTAB 23: HTAB 2: PRINT CR$;
  164. 5160  VTAB 24: HTAB 2: PRINT QUIT$;
  165. 5200  IF NDISKS <2  THEN 5300
  166. 5210  HTAB 2: VTAB 6 +CUR: PRINT "->";
  167. 5300  GOSUB 8400
  168. 5305 OLDCUR = CUR
  169. 5310  IF I$ = "I"  OR I$ = "i"  THEN CUR = CUR -1
  170. 5320  IF I$ = "M"  OR I$ = "m"  THEN CUR = CUR +1
  171. 5330  IF I$ =  CHR$(11)  THEN CUR = CUR -1
  172. 5340  IF I$ =  CHR$(10)  THEN CUR = CUR +1
  173. 5350  IF I$ =  CHR$(13)  AND NDISKS >0  THEN 5999
  174. 5360  IF I$ =  CHR$(27)  THEN QUIT = 1: GOTO 5999
  175. 5370  IF CUR >NDISKS  THEN CUR = 1
  176. 5380  IF CUR <1  THEN CUR = NDISKS
  177. 5390  IF CUR < >OLDCUR  THEN  HTAB 2: VTAB 6 +OLDCUR: PRINT "  "
  178. 5400  GOTO 5200
  179. 5999  RETURN 
  180. 6000  REM  ************************************************************
  181. 6010  REM  *     Perform the chosen test and display the result.      *
  182. 6020  REM  *                                                          *
  183. 6030  REM  ************************************************************
  184. 6100  VTAB 22: HTAB 2: PRINT "                                      ";
  185. 6110  VTAB 23: HTAB 2: PRINT "                                      ";
  186. 6120  VTAB 24: HTAB 2: PRINT "                                      ";
  187. 6130  VTAB 24: HTAB 2: PRINT ESC$;
  188. 6140 S = 0
  189. 6150  HTAB 36: VTAB 6 +CUR: PRINT "    "
  190. 6160  POKE ASM +3,3
  191. 6165  FOR T = 1 TO 2: REM  do test # 1 and # 2
  192. 6170  POKE ASM +5,T
  193. 6180  POKE ASM +6,DS(CUR): REM  slot #
  194. 6185  POKE ASM +7,DD(CUR): REM  drive # 
  195. 6190  GOTO 6230
  196. 6200  HTAB 38: VTAB 6 +CUR: PRINT STAR$(S)
  197. 6202  IF T = T  THEN 6210: REM  change this to "T<>2" to see progress
  198. 6204 T2 =  PEEK(ASM +12):T2 = T2 *256 + PEEK(ASM +11):T2 = T2 *256 + PEEK(ASM +10)
  199. 6206  VTAB 23: HTAB 5: PRINT T2/2;
  200. 6210 S = S +1: IF S >3  THEN S = 0
  201. 6220  GOSUB 8400: IF I$ =  CHR$(27)  THEN 6300
  202. 6225  POKE ASM +3,4
  203. 6230  GOSUB 6400: REM  call test
  204. 6240  IF GO  THEN 6200
  205. 6242  NEXT T
  206. 6245  PRINT  CHR$(7)
  207. 6250  HTAB 36: VTAB 6 +CUR: PRINT RES$
  208. 6260  RETURN 
  209. 6300  REM  *
  210. 6301  REM  * Abort test
  211. 6302  REM  *
  212. 6305  GOSUB 6600: REM  send END TEST to ASM
  213. 6310  HTAB 36: VTAB 6 +CUR: PRINT ABRT$
  214. 6320  RETURN 
  215. 6400  REM  *
  216. 6401  REM  * Call the test, return result
  217. 6402  REM  *
  218. 6410  CALL ASM
  219. 6420  IF  PEEK(ASM +4) >0  THEN GO = 0:RES$ = FAIL$: GOTO 6499
  220. 6430  IF  PEEK(ASM +8) = 0  THEN GO = 0:RES$ = PASS$: GOTO 6499
  221. 6440 GO = 1
  222. 6499  RETURN 
  223. 6600  REM  *
  224. 6601  REM  * terminate the test by sending END TEST to ASM
  225. 6602  REM  *
  226. 6610  POKE ASM +3,5
  227. 6620  GOSUB 6400
  228. 6630  RETURN 
  229. 6999  RETURN 
  230. 8100  IF CAP = 0  THEN  RETURN 
  231. 8110 A0$ = ""
  232. 8120  FOR A = 1 TO  LEN(A$)
  233. 8125 A0 =  ASC( MID$ (A$,A,1))
  234. 8130  IF A0 <97  OR A0 >122  THEN A0$ = A0$ + CHR$(A0): GOTO 8140
  235. 8135 A0$ = A0$ + CHR$(A0 -32)
  236. 8140  NEXT A
  237. 8150 A$ = A0$
  238. 8160  RETURN 
  239. 8200  REM  ----
  240. 8210  REM  ---- center string (A$) on line v
  241. 8220  REM  ----
  242. 8230 A0 =  LEN(A$)
  243. 8240  VTAB V: HTAB  INT((COL -A0)/2) +1
  244. 8250  PRINT A$;
  245. 8260  RETURN 
  246. 8300  REM  ----
  247. 8310  REM  ---- right justify string (A$) on line v
  248. 8320  REM  ----
  249. 8330  VTAB V: HTAB COL - LEN(A$)
  250. 8340  PRINT A$;
  251. 8350  RETURN 
  252. 8400  REM  ----
  253. 8410  REM  ---- input routine
  254. 8420  REM  ----
  255. 8430 KEY =  PEEK( -16384)
  256. 8440  POKE  -16368,0
  257. 8450  IF KEY <128  THEN KEY = 32
  258. 8460  IF KEY >127  THEN KEY = KEY -128
  259. 8470 I$ =  CHR$(KEY)
  260. 8480  RETURN 
  261. 9000  REM  ***********************************************************
  262. 9010  REM  *                  Error Routines                         *
  263. 9020  REM  *                                                         *
  264. 9030  REM  ***********************************************************
  265. 9100  REM  ----
  266. 9110  REM  ---- wrong kind of machine
  267. 9120  REM  ----
  268. 9130 A$ = "I'm sorry, but this program won't run on ": GOSUB 8100
  269. 9140  HOME : PRINT  CHR$(7);A$;M$
  270. 15000  REM  ***********************************************************
  271. 15010  REM  *                  Data Statements                        *
  272. 15020  REM  *                                                         *
  273. 15030  REM  ***********************************************************
  274. 15100  DATA   "this type of machine",1
  275. 15101  DATA   "an Apple ][",1
  276. 15102  DATA   "an Apple ][+",1
  277. 15103  DATA   "an Apple //e",0
  278. 15104  DATA   "an Apple //e enhanced",0
  279. 15105  DATA   "an Apple //c",0 
  280. 15106  DATA   "an Apple //c enhanced",0
  281. 15120  REM  ----
  282. 15121  REM  ---- splash screen
  283. 15122  REM  ----
  284. 15130  DATA  "______________________________________": REM  solid line
  285. 15132  DATA  "Apple //"
  286. 15134  DATA  "SCSI Hard Disk Tester"
  287. 15136  DATA   "Copyright Apple Computer, 1986"
  288. 15138  DATA  "All rights reserved"
  289. 15150  DATA  "|","/","-","\"
  290. 15160  DATA  "Pass","Fail","----"
  291. 15170  DATA  "No Name Found"
  292. 15300  DATA  "Version 1.0"
  293. 15306  DATA  "(c) Apple, 1986"
  294. 15307  DATA   "Slt","Drv","Name","Size"
  295. 15308  DATA    "===","===","===============","===="
  296. 15309  DATA  "No SCSI disks found"
  297. 15310  DATA  "Use ","I & M keys","arrows"," to select the disk"
  298. 15320  DATA  "Press RETURN to test disk"
  299. 15330  DATA  "Press ESC to stop testing"
  300. 15340  DATA   "Press ESC to quit        "